import { Injectable, Logger } from '@nestjs/common';
const { fork } = require('child_process');
// import {fork} from 'child_process'
// import path from 'path';
const path = require('path');
import { Cron, CronExpression } from '@nestjs/schedule';
const ExcelJS = require('exceljs');
const fs = require('fs');

@Injectable()
export class AppService {
  private readonly logger = new Logger();
  @Cron('* * * * * *') // 使用 cron 表达式，每隔7分钟执行一次
  handleCron() {
    const now = new Date();
    const minutes = now.getMinutes();
    const remainder = minutes % 7;
    const nextRun = 7 - remainder;
    const nextExecution = new Date(now.getTime() + nextRun * 60000); // 计算下一次执行时间
    console.log(`Next execution: ${nextExecution}`);

    this.logger.debug(`Current time: ${now}`);

    // 在这里编写你的具体逻辑
    // 可以调用其他 service 或者直接执行逻辑
  }
  getHello(): string {
    const currentDir = __dirname;
    const scriptPath = path.resolve(
      currentDir,
      '../../nest_temp/src/utils/index.js',
    );
    console.log(`currentDir`, currentDir);

    const childProcess = fork(scriptPath); // 替换为你实际的子进程脚本路径
    childProcess.send('start');
    // 监听子进程消息
    childProcess.on('message', (message) => {
      console.log(1111);

      console.log('Message from child process:', message);
    });

    childProcess.on('error', (err) => {
      console.error('Child process error:', err);
    });
    return 'Hello World!';
  }

  insetExcel() {
    if (!fs.existsSync('C:\\Users\\liulin\\Desktop\\bab\\file.xlsx')) {
      const workbook = new ExcelJS.Workbook();

      // 添加一个新的工作表
      const worksheet = workbook.addWorksheet('Sheet1');
      // 添加表头
      worksheet.columns = [
        { header: '硅片ID', key: '硅片ID' },
        { header: 'waferID', key: 'waferID' },
        { header: '检测时间', key: '检测时间' },
        { header: '分组', key: '分组' },
        { header: '相机', key: '相机' },
        { header: '舟号', key: '舟号' },
        { header: '管号', key: '管号' },
        { header: '平均灰度', key: '平均灰度' },
        { header: '颜色', key: '颜色' },
      ];
      // 读取已有的 Excel 文件
      const newData = [
        {
          硅片ID: null,
          waferID: '1',
          检测时间: '2024-07-25 14:45:03:000',
          分组: 'Group',
          相机: 'yl-1',
          舟号: 'boat1',
          管号: '1.9084183524808285',
          平均灰度: 94.76702117919922,
          颜色: '异色',
        },
        {
          硅片ID: null,
          waferID: '1',
          检测时间: '2024-07-25 14:45:03:000',
          分组: 'Group',
          相机: 'yl-1',
          舟号: 'boat1',
          管号: '1.9084183524808285',
          平均灰度: 94.76702117919922,
          颜色: '异色',
        },
        {
          硅片ID: null,
          waferID: '1',
          检测时间: '2024-07-25 14:45:03:000',
          分组: 'Group',
          相机: 'yl-1',
          舟号: 'boat1',
          管号: '1.9084183524808285',
          平均灰度: 94.76702117919922,
          颜色: '异色',
        },
        {
          硅片ID: null,
          waferID: '1',
          检测时间: '2024-07-25 14:45:03:000',
          分组: 'Group',
          相机: 'yl-1',
          舟号: 'boat1',
          管号: '1.9084183524808285',
          平均灰度: 94.76702117919922,
          颜色: '异色',
        },
        {
          硅片ID: null,
          waferID: '1',
          检测时间: '2024-07-25 14:45:03:000',
          分组: 'Group',
          相机: 'yl-1',
          舟号: 'boat1',
          管号: '1.9084183524808285',
          平均灰度: 94.76702117919922,
          颜色: '异色',
        },
      ];

      // 迭代添加数据行
      newData.forEach((rowData) => {
        worksheet.addRow(rowData);
      });

      // 将 Workbook 保存到文件
      workbook.xlsx
        .writeFile('C:\\Users\\liulin\\Desktop\\bab\\file.xlsx')
        .then(() => {
          console.log('Excel 文件已成功创建并写入数据。');
        })
        .catch((err) => {
          console.error('出现错误：', err);
        });
    } else {
      this.toinsetExcelq();
    }
  }

  toinsetExcel() {
    // 定义要追加的数据
    const newData = [
      { name: 'John Doe1', age: 30, city: 'New York' },
      { name: 'Jane Smith2', age: 28, city: 'San Francisco' },
      { name: 'Mike Johnson3', age: 35, city: 'Seattle' },
      { name: 'Mike fdsf', age: 35, city: 'Seattle' },
    ];

    // 读取已有的 Excel 文件
    const workbook = new ExcelJS.Workbook();
    workbook.xlsx
      .readFile('C:\\Users\\liulin\\Desktop\\bab\\file.xlsx')
      .then(() => {
        // 获取第一个工作表
        const worksheet = workbook.getWorksheet(1);
        console.log(`worksheet`, worksheet);
        worksheet.columns = [
          { header: '姓名', key: 'name' },
          { header: '年龄', key: 'age' },
          { header: '城市', key: 'city' },
        ];

        // 在最后一行的下面追加数据
        newData.forEach((rowData) => {
          worksheet.addRow(rowData);
        });

        // 保存更改到同一个文件
        return workbook.xlsx.writeFile(
          'C:\\Users\\liulin\\Desktop\\bab\\file.xlsx',
        );
      })
      .then(() => {
        console.log('数据已成功追加到 Excel 文件中。');
      })
      .catch((err) => {
        console.error('出现错误：', err);
      });
  }

  getH() {
    return 'ssdsd';
  }

  gege() {
    // CSV 文件路径
    const csvFilePath = 'C:\\Users\\liuli\\Desktop\\bab\\data.csv';

    // 要追加的数据
    const newData = [
      { name: 'Emily Brown', age: 25, city: 'Chicago' },
      { name: 'David Lee', age: 32, city: 'Los Angeles' },
    ];

    // 创建可写流
    const writeStream = fs.createWriteStream(csvFilePath, { flags: 'a' }); // 使用 'a' 标志表示追加模式

    // 将数据写入流
    newData.forEach((entry) => {
      const csvLine = `${entry.name},${entry.age},${entry.city}\n`;
      writeStream.write(csvLine, 'utf8', (err) => {
        if (err) {
          console.error('写入数据时出现错误：', err);
        } else {
          console.log('数据已成功追加到CSV文件中。');
        }
      });
    });

    // 结束流写入
    writeStream.end();
  }

  toinsetExcelq() {
    // 定义要追加的数据
    const newData = [
      {
        硅片ID: null,
        waferID: '1',
        检测时间: '2024-07-25 14:45:03:000',
        分组: 'Group',
        相机: 'yl-1',
        舟号: 'boat1',
        管号: '1.9084183524808285',
        平均灰度: 94.76702117919922,
        颜色: '异色',
      },
      {
        硅片ID: null,
        waferID: '1',
        检测时间: '2024-07-25 14:45:03:000',
        分组: 'Group',
        相机: 'yl-1',
        舟号: 'boat1',
        管号: '1.9084183524808285',
        平均灰度: 94.76702117919922,
        颜色: '异色',
      },
      {
        硅片ID: null,
        waferID: '1',
        检测时间: '2024-07-25 14:45:03:000',
        分组: 'Group',
        相机: 'yl-1',
        舟号: 'boat1',
        管号: '1.9084183524808285',
        平均灰度: 94.76702117919922,
        颜色: '异色',
      },
      {
        硅片ID: null,
        waferID: '1',
        检测时间: '2024-07-25 14:45:03:000',
        分组: 'Group',
        相机: 'yl-1',
        舟号: 'boat1',
        管号: '1.9084183524808285',
        平均灰度: 94.76702117919922,
        颜色: '异色',
      },
      {
        硅片ID: null,
        waferID: '1',
        检测时间: '2024-07-25 14:45:03:000',
        分组: 'Group',
        相机: 'yl-1',
        舟号: 'boat1',
        管号: '1.9084183524808285',
        平均灰度: 94.76702117919922,
        颜色: '异色',
      },
    ];
    // 文件路径
    const filePath = 'C:\\Users\\liulin\\Desktop\\bab\\file.xlsx';

    // 创建一个新的工作簿对象
    const workbook = new ExcelJS.Workbook();

    // 读取现有的Excel文件
    const readStream = fs.createReadStream(filePath);

    // 使用流式读取
    workbook.xlsx
      .read(readStream)
      .then(() => {
        // 获取第一个工作表
        let worksheet = workbook.getWorksheet(1);
        worksheet.columns = [
          { header: '硅片ID', key: '硅片ID' },
          { header: 'waferID', key: 'waferID' },
          { header: '检测时间', key: '检测时间' },
          { header: '分组', key: '分组' },
          { header: '相机', key: '相机' },
          { header: '舟号', key: '舟号' },
          { header: '管号', key: '管号' },
          { header: '平均灰度', key: '平均灰度' },
          { header: '颜色', key: '颜色' },
        ];

        // 构建要追加的数据
        let rowsToAdd = newData.map((row) => row);

        // 追加数据到工作表
        worksheet.addRows(rowsToAdd);

        // 使用流式写入保存修改后的工作簿
        const writeStream = fs.createWriteStream(filePath);
        return workbook.xlsx.write(writeStream);
      })
      .then(() => {
        console.log('数据追加成功');
      })
      .catch((err) => {
        console.error('出现错误：', err);
      });
  }
}
